import router from '@/router'
import store from '@/store'
import nprogress from 'nprogress'
import NProgress from 'nprogress' // 引入一份进度条插件
import 'nprogress/nprogress.css' // 引入进度条样式
// import { asyncRoutes } from '@/router'
const WHITE_LIST = ['/login', '/404']
router.beforeEach(async(to, from, next) => {
  NProgress.start()
  const token = store.getters.token
  if (token) {
    // next()
    if (to.path === '/login') {
      next('/')
      nprogress.done()
    } else {
      if (!store.state.user.userInfo.userId) {
        const res = await store.dispatch('user/getUserInfo')
        console.log('用户的权限信息在这', res)
        // 应该在这里根据res.roles.menus,去动态添加对应的属于他自己的路由规则
        // 这里应该是从所有的动态路由规则asyncRoutes 挑几个添加(将来要过滤的)
        // router.addRoutes([{path:,component:},{},{}])
        // 只能在这里调用过滤路由的action
        // store.dispatch返回的是promise  必须await
        const res2 = await store.dispatch('permission/filterRoutes', res.roles.menus)
        console.log(res2)
        // router.addRoutes这种动态添加路由的方式  是异步的! 不会立刻生效
        // 固定套路:重进一次路由
        router.addRoutes([
          ...res2,
          { path: '*', redirect: '/404', hidden: true }
        ])
        // 以原来的姿势  重新进入一次页面 /test/123?type=fff
        next({
          ...to,
          replace: true// 解决历史重复的问题(重进了一次页面)
        })
        return
      }
      next()
    }
  } else {
    // next('/login')判断是否去白名单页面(不重要的页面,无需token也能访问的页面)
    // if (WHITE_LIST.includes(to.path)!==-1)
    if (WHITE_LIST.includes(to.path)) {
      next()
    } else {
      next('/login')
      nprogress.done()
    }
  }
})
router.afterEach((to, from) => {
  nprogress.done()
  // setTimeout(() => {
  // }, 300)
})
